package com.example.hutool;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Predicate;

/**
 * @author 江黎
 * @since 2022-11-22
 */
public class 集合工具类 {

    public static void main(String[] args) {
        // 1、distinct 去重
        // 2、intersection 交集
        // 3、addAllIfNotContains 如果不包含则添加
        // 4、disjunction 差集
        // 5、union 并集

        List<String> list = CollUtil.newArrayList("aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk", "lll");
        CollUtil.get(list, 0); // aaa
        // 负数表示从后取
        CollUtil.get(list, -1); // ccc
        // 可以避免数组越界
        CollUtil.get(list, 3); // null
        // 设置或增加元素。当index小于List的长度时，替换指定位置的值，否则在尾部追加
        CollUtil.setOrAppend(list, 3, "ddd");
        // 统计集合中元素的个数
        Map<String, Integer> countMap = CollUtil.countMap(list);
        System.out.println(countMap);

        // 集合分组, 不如lambda好用
        List<User> users = CollUtil.newArrayList(new User("张三", 20), new User("李四", 25),
                new User("王五", 18), new User("赵六", 20));
        List<List<User>> age = CollUtil.groupByField(users, "age");
        System.out.println(age.toString());

        // 集合排序
        List<User> userList = CollUtil.sortByProperty(users, "age");
        System.out.println(userList);
        // 根据汉字的拼音顺序排序
        CollUtil.sortByPinyin(list);

        // 判断集合中是否存在符合条件的元素
        Predicate<User> contain = user -> user.getAge() > 23;
        boolean b = CollUtil.contains(users, contain);

        // 拆分集合：对集合按照指定长度分段，每一个段为单独的集合，返回这个集合的列表，适用于大量数据需要插入数据库时进行拆分后分批插入
        List<List<String>> split = ListUtil.split(list, 5);
        split.forEach(System.out::println);
    }
}
